/**
  ************************************* Copyright ****************************** 
  *
  *                 (C) Copyright 2024,LQH,China, GCU.
  *                            All Rights Reserved
  *                              
  *                                  By LQH
  *                     
  *    
  * FileName   : bsp_timer_basic.c   		
  * Author     : 少年潜行(snqx-lgh)			
  * Date       : 2024-01-04         
  * Description: CSDN主页： https://blog.csdn.net/wan1234512?type=blog
			     Gitee地址：https://gitee.com/snqx-lqh
				 这个是基本定时器的使用，在STM32F103中，只有TIM6和TIM7是基本定时器,
				 本文件初始化定时器6作为示例
 
 * 下面注释摘自野火说明
 * 注意：TIM_TimeBaseInitTypeDef结构体里面有5个成员，TIM6和TIM7的寄存器里面只有
 * TIM_Prescaler和TIM_Period，所以使用TIM6和TIM7的时候只需初始化这两个成员即可，
 * 另外三个成员是通用定时器和高级定时器才有.
 *-----------------------------------------------------------------------------
 *typedef struct
 *{ TIM_Prescaler            都有
 *	TIM_CounterMode			 TIMx,x[6,7]没有，其他都有
 *  TIM_Period               都有
 *  TIM_ClockDivision        TIMx,x[6,7]没有，其他都有
 *  TIM_RepetitionCounter    TIMx,x[1,8,15,16,17]才有
 *}TIM_TimeBaseInitTypeDef; 
 *-----------------------------------------------------------------------------

  ******************************************************************************
 */


#include "bsp_timer_basic.h"

void bsp_timer6_basic_init(uint16_t arr,uint16_t psc)
{
	//时钟初始化
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE); //时钟使能
    //定时器初始化
    {
        TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

        TIM_TimeBaseStructure.TIM_Period    =   arr-1;                      //设置自动重装载值
        TIM_TimeBaseStructure.TIM_Prescaler =   psc-1;                    //设置预分频值

        TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位
    }
    //NVIC初始化
    {
        NVIC_InitTypeDef NVIC_InitStructure;

        NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn;              //TIM6中断
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 5;    //先占优先级0级
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;           //从优先级3级
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;              //IRQ通道被使能

        NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器
    }
    //定时器使能以及开启中断
    {
        TIM_ITConfig(TIM6,TIM_IT_Update,ENABLE ); //使能指定的TIM6中断,允许更新中断
        TIM_Cmd(TIM6, ENABLE);                    //使能TIMx
    }
}

void TIM6_IRQHandler(void)
{
	if (TIM_GetITStatus(TIM6, TIM_IT_Update) != RESET)  //检查TIM3更新中断发生与否
	{

		TIM_ClearITPendingBit(TIM6, TIM_IT_Update  );   //清除TIMx更新中断标志
	}
}
